package com.ling.common.library.utils

import android.content.Context
import android.os.Parcelable
import com.tencent.mmkv.MMKV

/**
 * @author Ling
 * @date :2024/12/4 11:10
 */
object MkvUtil {

    /**
    * 请在application的onCreate中调用
    * */
    fun initialize(context : Context){
        MMKV.initialize(context)
    }

    /**
     * 存储Int数据
     * @param name 键名
     * @param value 键值
    * */
    fun setInt(name : String , value : Int) : Boolean{
        if(MMKV.getRootDir() == null) {
            println("please call initialize method before")
            return false
        }
        return MMKV.defaultMMKV().encode(name , value)
    }

    /**
     * 获取Int数据
     * @param name 键名
     * @param defaultValue 如果数据为空默认键值
     * */
    fun getInt(name : String , defaultValue : Int) : Int{
        return MMKV.defaultMMKV().decodeInt(name , defaultValue)
    }

    /**
     * 存储String数据
     * @param name 键名
     * @param value 键值
     * */
    fun setString(name : String , value : String) : Boolean{
        if(MMKV.getRootDir() == null) {
            println("please call initialize method before")
            return false
        }
        return MMKV.defaultMMKV().encode(name , value)
    }

    /**
     * 获取String数据
     * @param name 键名
     * @param defaultValue 如果数据为空默认键值
     * */
    fun getString(name : String , defaultValue : String ?= null) : String?{
        return MMKV.defaultMMKV().decodeString(name , defaultValue)
    }

    /**
     * 存储String数据
     * @param name 键名
     * @param value 键值
     * */
    fun setBoolean(name : String , value : Boolean) : Boolean{
        if(MMKV.getRootDir() == null) {
            println("please call initialize method before")
            return false
        }
        return MMKV.defaultMMKV().encode(name , value)
    }

    /**
     * 获取Boolean数据
     * @param name 键名
     * @param defaultValue 如果数据为空默认键值
     * */
    fun getBoolean(name : String , defaultValue : Boolean) : Boolean{
        return MMKV.defaultMMKV().decodeBool(name , defaultValue)
    }

    /**
     * 存储Long数据
     * @param name 键名
     * @param value 键值
     * */
    fun setLong(name : String , value : Long) : Boolean{
        if(MMKV.getRootDir() == null) {
            println("please call initialize method before")
            return false
        }
        return MMKV.defaultMMKV().encode(name , value)
    }

    /**
     * 获取Long数据
     * @param name 键名
     * @param defaultValue 如果数据为空默认键值
     * */
    fun getLong(name : String , defaultValue : Long) : Long{
        return MMKV.defaultMMKV().decodeLong(name , defaultValue)
    }

    /**
     * 存储Double数据
     * @param name 键名
     * @param value 键值
     * */
    fun setDouble(name : String , value : Double) : Boolean{
        if(MMKV.getRootDir() == null) {
            println("please call initialize method before")
            return false
        }
        return MMKV.defaultMMKV().encode(name , value)
    }

    /**
     * 获取Double数据
     * @param name 键名
     * @param defaultValue 如果数据为空默认键值
     * */
    fun getDouble(name : String , defaultValue : Double) : Double{
        return MMKV.defaultMMKV().decodeDouble(name , defaultValue)
    }

    /**
     * 存储Float数据
     * @param name 键名
     * @param value 键值
     * */
    fun setFloat(name : String , value : Float) : Boolean{
        if(MMKV.getRootDir() == null) {
            println("please call initialize method before")
            return false
        }
        return MMKV.defaultMMKV().encode(name , value)
    }

    /**
     * 获取Float数据
     * @param name 键名
     * @param defaultValue 如果数据为空默认键值
     * */
    fun getFloat(name : String , defaultValue : Float) : Float{
        return MMKV.defaultMMKV().decodeFloat(name , defaultValue)
    }

    /**
     * 存储ByteArray数据
     * @param name 键名
     * @param value 键值
     * */
    fun setByteArray(name : String , value : ByteArray) : Boolean{
        if(MMKV.getRootDir() == null) {
            println("please call initialize method before")
            return false
        }
        return MMKV.defaultMMKV().encode(name , value)
    }

    /**
     * 获取ByteArray数据
     * @param name 键名
     * @param defaultValue 如果数据为空默认键值
     * */
    fun getByteArray(name : String , defaultValue : ByteArray ?= null) : ByteArray?{
        return MMKV.defaultMMKV().decodeBytes(name , defaultValue)
    }

    /**
     * 存储Set数据
     * @param name 键名
     * @param value 键值
     * */
    fun setSetList(name : String , value : Set<String>) : Boolean{
        if(MMKV.getRootDir() == null) {
            println("please call initialize method before")
            return false
        }
        return MMKV.defaultMMKV().encode(name , value)
    }

    /**
     * 获取Set数据
     * @param name 键名
     * @param defaultValue 如果数据为空默认键值
     * */
    fun getSetList(name : String , defaultValue : Set<String> ?= null) : Set<String>?{
        return MMKV.defaultMMKV().decodeStringSet(name , defaultValue)
    }
}